'''
主代码测试
'''
import numpy as np
import math
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import Env.EnvMain as env


# 传参，初始化，并进行绘图准备
A = env.ACEnv(1,1)


for k in range(10):
     # 需要引入包from mpl_toolkits.mplot3d import axes3d，才能使用projection='3d'的取值

    # 初始化环境，并输出环境的主要参数
    print('第1步')
    print('初始化')
    a = A.reset()
    # count=0
    # for i in a:
    #     print(dic[count])
    #     print(i)
    #     count+=1
    # A.render(fig,ax)


    # 将敌我双方拉至攻击边界
    print('第2步')
    zw=np.random.randint(0,120)
    b = A.FirstStep([[0,zw]])
    # count=0
    # for i in b:
    #     print(dic[count])
    #     print(i)
    #     count+=1
    A.move()    # 去除坐标列表中的初始化占位坐标
    # plt.clf()       # 清除前一回合图像
    # ax = fig.add_subplot(111, projection='3d')  # 重新建立三维坐标
    # A.render(fig,ax)

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    A.render(fig,ax)

     # 进行每回合的仿真
    print('第3步')
    c = A.step([[[-0.1,-0.17]], [[0]]]) # 第二个列表不是攻击状态，而是攻击策略
    # count=0
    # for i in c[0]:
    #     print(dic[count])
    #     print(i)
    #     count+=1
    plt.clf()       # 清除前一回合图像
    ax = fig.add_subplot(111, projection='3d')  # 重新建立三维坐标
    A.render(fig,ax)

    print('第4步')
    c = A.step([[[-0.02,0.13]], [[1]]])
    # count=0
    # for i in c[0]:
    #     print(dic[count])
    #     print(i)
    #     count+=1
    plt.clf()       # 清除前一回合图像
    ax = fig.add_subplot(111, projection='3d')  # 重新建立三维坐标
    A.render(fig,ax)

    done=True
    iii=0
    # 多次循环step()
    while iii==200 or done:
        num = iii + 5
        print('第 %d 步' % num)
        para = []
        angle = []
        policy = []
        rate = 0.9      # 设置随机率，用以将攻击策略转化为1的标准
        friends = A.friends     # 用于获取空中单位的存活状态和载弹量状态
        enemies = A.enemies     # 用于获取地面单位的存活状态

        '''设置机动动作矩阵'''

        Ang = np.random.uniform(-0.17, 0.17, 2)
        angle.append(Ang)
        '''设置攻击动作矩阵'''
        D = [0]  # 生成初始攻击策略矩阵
        R = np.random.uniform(0, 1)     # 设置随机率
        '''判断空中单位的损伤状态，载弹量和地面单位的损伤状态对攻击策略的影响'''
        if friends[0].live == 1 and friends[0].NumberOfMissile > 0:
            if enemies[0].live == 1 and R <= rate:
                D[0] = 1
            policy.append(D)
        para.append(angle)
        para.append(policy)

        _,_,done = A.step(para)
        # count = 0
        # for i in c[0]:
        #     print(dic[count])
        #     print(i)
        #     count += 1
        plt.clf()  # 清除前一回合图像
        ax = fig.add_subplot(111, projection='3d')  # 重新建立三维坐标
        A.render(fig, ax)
        iii+=1


    # plt.ioff()
    # plt.show()
    plt.savefig('Env/Records/figs/'+str(k)+'.png')
    plt.close()
    A.excel_save()

""" # excel模块测试
import Env.Tools.ExcelFunc as xl
exc=xl.excel()
exc.out_to_excel([111,'2asd'])
exc.save()
"""